package com.cgnpc.scp.sri.laboratory.controller;

import cn.com.cgnpc.aep.bizcenter.appcenter.sdk.result.ApiResult;
import com.cgnpc.cud.annotation.OperatorType;
import com.cgnpc.cud.annotation.UBA;
import com.cgnpc.cud.core.domain.AjaxResult;
import com.cgnpc.scp.achievement.pojo.IdReq;
import com.cgnpc.scp.common.bean.CreateFileInfo;
import com.cgnpc.scp.common.bean.MyPageResult;
import com.cgnpc.scp.common.utils.AjaxResultUtil;
import com.cgnpc.scp.hse.controller.HseCheckOptionsConfigController;
import com.cgnpc.scp.sri.laboratory.mybatis.entity.LaboratoryAnnualPlan;
import com.cgnpc.scp.sri.laboratory.pojo.LaboratoryAnnualPlanVo;
import com.cgnpc.scp.sri.laboratory.service.LaboratoryAnnualPlanService;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**********************************
 * 用途说明: 实验室年度计划管理
 * 作者姓名: zhangyibing
 * 创建时间: 2020年10月4日22:01:04
 ***********************************/
@RestController
@RequestMapping("/scp/sri/laboratoryAnnualPlan")
public class LaboratoryAnnualPlanController {
    private static final Logger LOGGER = LoggerFactory.getLogger(LaboratoryAnnualPlanController.class);

    @Autowired
    private LaboratoryAnnualPlanService laboratoryAnnualPlanService;

    @Autowired
    private MessageSource messageSource;

    /**********************************
     * 用途说明: 调试科研创新管理 - 实验室年度计划管理 - 列表
     * 参数说明 params
     * 返回值说明: 能建列表
     ***********************************/
    @ApiOperation(value="调试科研创新管理 - 实验室年度计划管理 - 列表")
    @UBA(module = "调试科研创新管理",action = "实验室年度计划列表",channel = OperatorType.Page)
    @RequestMapping(value = "/listPage", method = {RequestMethod.POST})
    public AjaxResult listPage(HttpServletRequest request, @RequestBody Map<String, Object> params) {
        try {
            MyPageResult<LaboratoryAnnualPlan> result = laboratoryAnnualPlanService.queryListPage(params);
            return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,result);
        } catch (Exception e) {
            LOGGER.error("LaboratoryAnnualPlanController listPage error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试科研创新管理 - 实验室年度计划管理 - 计划详情
     * 参数说明 params
     * 返回值说明: 能建列表
     ***********************************/
    @ApiOperation(value="调试科研创新管理 - 实验室年度计划管理 - 计划详情")
    @UBA(module = "调试科研创新管理",action = "实验室年度计划详情",channel = OperatorType.Button)
    @RequestMapping(value = "/planInfo", method = {RequestMethod.POST})
    public AjaxResult planInfo(HttpServletRequest request, @RequestBody IdReq idReq) {
        try {
            LaboratoryAnnualPlanVo result = laboratoryAnnualPlanService.planInfo(idReq.getId());
            return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,result);
        } catch (Exception e) {
            LOGGER.error("LaboratoryAnnualPlanController planInfo error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试科研创新管理 - 实验室年度计划管理-导出Excel
     * 参数说明: HttpServletRequest request, @RequestBody T reqEntity
     * 返回值说明: Object
     ***********************************/
    @ApiOperation(value = "调试科研创新管理 - 实验室年度计划管理-导出Excel")
    @UBA(module = "调试科研创新管理", action = "实验室年度计划管理导出Excel", channel = OperatorType.Button)
    @RequestMapping(value = "/exportExcel", method = {RequestMethod.POST})
    @ResponseBody
    public AjaxResult exportExcel(HttpServletRequest request, @RequestBody Map<String, Object> params) {
        AjaxResult ajaxResult = null;
        try {
            CreateFileInfo createFileInfo = laboratoryAnnualPlanService.exportExcel(params);
            return AjaxResultUtil.createSuccessMessage(createFileInfo);
        } catch (Exception e) {
            LOGGER.error("LaboratoryAnnualPlanController exportExcel error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试科研创新管理 - 实验室年度计划管理 - 获取所有年份
     * 参数说明 params
     * 返回值说明: 所有年份
     ***********************************/
    @ApiOperation(value="调试科研创新管理 - 实验室年度计划管理 - 获取预算年度")
    @RequestMapping(value = "/getAllYear", method = {RequestMethod.POST})
    public AjaxResult getAllYear(HttpServletRequest request) {
        try {
            List<String> result = laboratoryAnnualPlanService.getAllYear();
            return AjaxResult.success().put("years",result);
        } catch (Exception e) {
            LOGGER.error("LaboratoryAnnualPlanController getAllYeas error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试科研创新管理 - 实验室年度计划管理 - 获取所有年度计划名称及id
     * 参数说明 params
     * 返回值说明: 所有年度计划名称及id
     ***********************************/
    @ApiOperation(value="调试科研创新管理 - 实验室年度计划管理 - 获取所有年度计划名称及id")
    @RequestMapping(value = "/getAllPlanInfo", method = {RequestMethod.POST})
    public AjaxResult getAllPlanInfo(HttpServletRequest request) {
        try {
            List<LaboratoryAnnualPlan> result = laboratoryAnnualPlanService.getAllPlanInfo();
            return AjaxResult.success().put("data",result);
        } catch (Exception e) {
            LOGGER.error("LaboratoryAnnualPlanController getAllPlanInfo error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 调试科研创新管理 - 实验室年度计划管理 - 计划新增（提交流程或提交变更流程）
     * 参数说明 params
     * 返回值说明: 能建列表
     ***********************************/
    @ApiOperation(value="调试科研创新管理 - 实验室年度计划管理 - 计划新增")
    @RequestMapping(value = "/planSave", method = {RequestMethod.POST})
    public AjaxResult planSave(HttpServletRequest request, @RequestBody Map<String, Object> params) {
        try {
            AjaxResult result = laboratoryAnnualPlanService.planSave(params);
            return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,result);
        } catch (Exception e) {
            LOGGER.error("LaboratoryAnnualPlanController planSave error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 提交/回退流程
     * 参数说明 params
     * 返回值说明:
     ***********************************/
    @PostMapping("/submitProcess")
    @UBA(module = "实验室年度计划管理", action = "实验室年度计划管理审批流程提交/回退", channel = OperatorType.Button)
    @ApiOperation(value="提交/回退流程")
    public AjaxResult submitProcess(HttpServletRequest request,@RequestBody Map<String, Object> params) {
        try {
            ApiResult apiResult = laboratoryAnnualPlanService.submitProcess(params);
            return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,apiResult);
        } catch (Exception e) {
            e.printStackTrace();
            LOGGER.error("CapacityBuildingController submitProcess error : {}",e.getMessage(),e);
            return AjaxResultUtil.createI18nDefaultError(request,messageSource,e.getMessage());
        }
    }

    /**********************************
     * 用途说明: 实验室年度计划管理 - 实验室计划删除草稿
     * 参数说明 params
     * 返回值说明:
     ***********************************/
    @ApiOperation(value="实验室年度计划管理 - 实验室计划删除草稿")
    @UBA(module = "实验室年度计划管理", action = "实验室计划删除草稿", channel = OperatorType.Page)
    @RequestMapping(value = "/deleteDraft", method = {RequestMethod.POST})
    public AjaxResult deleteDraft(HttpServletRequest request, @RequestBody Map<String, Object> params) throws Exception {
        ApiResult result = laboratoryAnnualPlanService.deleteDraft(params);
        return AjaxResultUtil.createI18nDefaultSuccess(request,messageSource,result);
    }

}
